|
ADD STATIC SCORCH
This command will add an individual blob of scorch into the static universe set-up previously with a call to SET STATIC SCORCH before the main loop begins.
ADD STATIC SCORCH Scorch Size, Scorch Type
Scorch Size
Float
Specifies the size of the scorch for the scene, measured in standard 3D units
Scorch Type
Integer
Specifies an index between zero and the number of scorch tiles within your main texture image. If the scorch was set up as a 4x4 grid of images, your range would be 0 to 15
This command does not return a value.
The scorch will appear at the position and orientation of the last raycast that happened in the static universe. The trick is to cast a ray into the scene, and where-ever that ray hits will be the location of the scorch, ideal for surface normals which may not be easy to calculate.
cls 0 : ink rgb(255,255,255),0 : circle 16,16,14
scorchimage=1 : get image scorchimage,0,0,32,32
set static universe 40*100,21*100,40*100
tfile$="universe.dbo"
if file exist(tfile$)=1
dividetexturesize=0 : load static objects tfile$,dividetexturesize : omax=1
else
collision=2 : Arbitraryvalue=0 : shadow=1 : portal=1 : o=1
for x=0 to 10 : for z=0 to 10
make object box o,100,5,100 : position object o,x*100,2.5,z*100
make static object o,collision,Arbitraryvalue,shadow,portal : inc o
if x=6 and z=6
make object cube o,25 : make mesh from object 1,o : position object o,x*100,-10,z*100
for l=1 to 15 : add limb o,l,1 : offset limb o,l,0,l*28,0 : make static limb o,l,collision,Arbitraryvalue,shadow,portal : next l : inc o
endif
next z : next x
for w=1 to 4
if w=1 then sx=1000 : sz=50 : px=500 : pz=0
if w=2 then sx=1000 : sz=50 : px=500 : pz=1000
if w=3 then sx=50 : sz=1000 : px=0 : pz=500
if w=4 then sx=50 : sz=1000 : px=1000 : pz=500
make object box o,sx,200,sz : position object o,px,100,pz
make static object o,collision,Arbitraryvalue,shadow,portal : inc o
next w
for er=12 to 33 : delete static object er : next er
build static portals : delete light map lights : add static objects to light map pool
make object cube o,100 : position object o,600,75,400 : add object to light map pool o
make mesh from object 3,o : add limb o,1,3 : offset limb o,1,0,0,-125
add limb to light map pool o,1 : inc o
add light map light 400,90,800,500,255,0,0,50,1
add light map light 200,90,400,500,0,255,0,50,1
add light map light 800,90,200,500,0,0,255,50,1
texturesize=16 : texturequality=1 : lightmapsavepath$="lightmaps"
if path exist(lightmapsavepath$)=0 then make directory lightmapsavepath$
create light maps texturesize,texturequality,lightmapsavepath$
if file exist(tfile$)=1 then delete file tfile$
save static objects tfile$ : omax=o
for i=1 to omax-1 : delete object i : next i
endif
set static scorch scorchimage,1,1
d=omax : make object cone d,100 : make mesh from object 2,d : add limb d,1,2 : rotate limb d,1,90,0,0
offset limb d,1,0,0,50 : scale limb d,1,30,100,30
position object d,500,150,600 : color object d,rgb(255,255,0) : yrotate object d,0 : attach object to static d
make object cube d+1,50 : position object d+1,700,200,500 : make object box d+2,100,100,20 : make object box d+3,80,80,40
perform csg difference d+2,d+3 : position object d+3,100,150,925 : position object d+2,100,50,925
make object box d+4,100,100,20 : make object box d+5,80,80,40 : perform csg union d+4,d+5 : position object d+5,300,150,925 : position object d+4,300,50,925
make object box d+6,100,100,20 : make object box d+7,80,80,40 : perform csg intersection d+6,d+7 : position object d+7,500,150,925 : position object d+6,500,50,925
make object box d+8,100,100,20 : make object box d+9,80,80,40 : perform csg clip d+8,d+9 : position object d+9,700,150,925 : position object d+8,700,50,925
make object sphere d+11,75,30,30 : make mesh from object d+11,d+11 : reduce mesh d+11,0,0,10,5,10
delete object d+11 : make object d+11,d+11,0 : position object d+11,900,150,925
make object box d+10,100,100,20 : make mesh from object d+10,d+10
lock vertexdata for mesh d+10
perform csg difference on vertexdata d+11 : perform csg union on vertexdata d+11 : perform csg intersection on vertexdata d+11
unlock vertexdata
delete object d+10 : make object d+10,d+10,0 : position object d+10,900,50,925
set global shadows on : set global shadow shades 1 : set global shadow color 0,0,0,64
set shadow light 1,300,500,700,2000 : set shadow position -1,300,500,700
for i=0 to 11 : set shadow shading on d+i : next i
position camera 300,50,300 : point camera 500,50,500
set point light 0,500,300,500 : set ambient light 20
set normalization on : sync on : sync rate 60
while mouseclick()=0
if inkey$()="-" then set static portals on
if inkey$()="=" then set static portals off
if inkey$()="[" then set static objects wireframe on
if inkey$()="]" then set static objects wireframe off
control camera using arrowkeys 0,2,4
x#=object position x(d) : y#=object position y(d) : z#=object position z(d)
nx#=newxvalue(x#,object angle y(d),75.0) : nz#=newzvalue(z#,object angle y(d),75.0)
if static raycast(x#,y#,z#,nx#,y#,nz#)=0
yrotate object d,object angle y(d)+rnd(10)/100.0 : move object d,1
else
yrotate object d,object angle y(d)+1 : add static scorch 25,0
endif
if static volume(x#,y#,z#,x#,y#-5,z#,10)=0 then position object d,x#,y#-5,z#
if createdinvisiblefloor=0
make static collision box -100,-200,-100,1100,0,1100 : createdinvisiblefloor=1
else
x#=object position x(d+1) : y#=object position y(d+1) : z#=object position z(d+1)
if get static collision hit(x#-25,y#-25,z#-25,x#+25,y#+25,z#+25,x#-25,y#-30,z#-25,x#+25,y#+20,z#+25)=0
y#=y#-grav# : inc grav#,0.5
else
colArbitraryvalue=get static collision value() : colcount=get static collision count() : colfloor=get static collision floor()
x#=x#+get static collision x() : y#=y#+get static collision y() : z#=z#+get static collision z()
endif
position object d+1,x#,y#,z#
if static line of sight(x#,y#,z#,x#,y#-5,z#-1,0.1,0.1)=1 then grav#=grav#*-0.95
endif
sync
endwhile
set global shadows off : detach object from static d : delete static objects
end
GAMEFX Commands Menu
Index
|